package flex.cc.store.service.impl;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import flex.cc.store.dto.vo.StoreCouponVo;
import flex.cc.store.util.QRCodeUtil;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import flex.cc.store.dao.StoreCouponDao;
import flex.cc.store.dto.entity.StoreCouponEntity;
import flex.cc.store.dto.entity.StoreQrEntity;
import flex.cc.store.service.StoreCouponService;
import flex.cc.store.service.StoreQrService;
import javax.annotation.Resource;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 *
 * @author WANGCONG
 * 2021年12月15日下午14:40:58
 * @desc 卡券实现层
 */
@Service("storeCouponService")
public class StoreCouponServiceImpl extends ServiceImpl<StoreCouponDao, StoreCouponEntity>implements StoreCouponService{

    @Resource StoreCouponDao storeCouponDao;
    @Resource
    private StoreQrService storeQrService;
    
    /**
     * @param reqVo 卡券
     * @return
     * @description 根据卡券类型查询服务券列表
     * @author wkangle
     * @time 2021/12/15 0015 16:00
     * @exception/throws
     */
    @Override
    public List<StoreCouponVo> queryCouponList(Map<String, Object> reqVo) {
        return storeCouponDao.queryCouponList(reqVo);
    }

    /**
	 * 
	 * @author WANGCONG
	 * 2021年12月16日下午1:51:56
	 * @desc 根据卡券码查询实体信息
	 */
	@Override
	public StoreCouponEntity queryByCouponNum(String couponNum) {
		return storeCouponDao.queryByCouponNum(couponNum);
	}

    /**
     * @param params 查询参数
     * @return
     * @description 根据参数查询卡券实体
     * @author wkangle
     * @time 2021/12/16 0016 10:38
     * @exception/throws
     */
    @Override
    public StoreCouponEntity getOneByParams(Map<String, Object> params) {
        return storeCouponDao.getOneByParams(params);
    }

    /**
	 * 
	 * @author WANGCONG
	 * 2021年12月16日下午2:38:36
	 * @desc 查询当前月 ，同一车牌号，相同服务类型的服务次数（用于核销）
	 */
	@Override
	public int findServiceNum(Map<String, String> params) {
		return storeCouponDao.findServiceNum(params);
	}

	/**
	 * 
	 * @author WANGCONG
	 * 2021年12月17日下午14:02:51
	 * @desc 根据map参数更新卡券信息
	 */
	@Override
	public int updateByParam(Map<String, Object> params) {
		return storeCouponDao.updateByParam(params);
	}

	/**
	 * @param couponNum 卡券码
	 * @return
	 * @description 生成卡券二维码
	 * @author wkangle
	 * @time 2021/12/21 0021 14:30
	 * @exception/throws
	 */
	@Override
//	public Map<String, Object> couponQR(String couponNum) {
//		Map<String, Object> result = new HashMap<>();
//		String qr = QRCodeUtil.createQR(couponNum);
//		result.put("message", qr);
//		if ("二维码生成失败".equals(qr)) {
//			result.put("code", "9998");
//		} else {
//			result.put("code", "0000");
//		}
//		return result;
//	}
//	
	public Map<String, Object> couponQR(String couponNum) {
		Map<String, Object> result = new HashMap<>();
		Map<String, Object> qr = QRCodeUtil.createQR(couponNum);
		String code = (String)qr.get("code");
		if("0".equals(code)){//成功
			result.put("code", "0000");
			result.put("message", qr.get("imgStr"));
			Date createDate = (Date)qr.get("createDate");
			StoreQrEntity qrEntity = new StoreQrEntity();
			qrEntity.setStatus("0"); //是否已核销通过，0-否，1-是
			qrEntity.setCouponNum(couponNum);
			qrEntity.setCreateTime(createDate);
			storeQrService.insertVo(qrEntity);
		}else{
			result.put("code", "9998");
			result.put("message", "二维码生成失败");
		}
		
		return result;
	}

	/**
	 * 
	 * @author WANGCONG
	 * 2021年12月27日上午9:37:26
	 * @desc 根据map参数查询卡券信息集合
	 */
	@Override
	public List<StoreCouponEntity> findListByParam(Map<String, Object> params) {
		return storeCouponDao.findListByParam(params);
	}

	/**
	 * @author R
	 * 2021年12月29日上午9:47:56
	 * @desc 根据map参数查询卡券信息集合
	 */
	@Override
	public List<StoreCouponEntity> findCouponInfo(Map<String, Object> params){
		return storeCouponDao.findCouponInfo(params);
	}

	/**
	 * @author KSY
	 * 2022年1月5日
	 * @desc 查询卡券列表
	 */
	@Override
	public IPage<StoreCouponEntity> queryCardListWithPage(StoreCouponEntity storeCouponVo) {
		Page<StoreCouponEntity> page = new Page<>(storeCouponVo.getPageNum(),storeCouponVo.getPageSize());
		IPage<StoreCouponEntity> pageData=storeCouponDao.queryCardListWithPage(page, storeCouponVo);
		return pageData;
	}

	/**
	 * @author KSY
	 * 2022年1月7日
	 * @desc 服务包部分导出
	 */
	@Override
	public IPage<StoreCouponEntity> queryCardListWithDataIds(StoreCouponEntity vo) {
		Page<StoreCouponEntity> page = new Page<>(vo.getPageNum(),vo.getPageSize());
		return storeCouponDao.queryCardListWithDataIds(page, vo);
	}
}
